{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "outputs": [
    {
     "name": "stdout",
     "text": [
      "1.4.0\n"
     ],
     "output_type": "stream"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import sys\n",
    "sys.path.append(\"..\") \n",
    "import d2l as d2l\n",
    "print(torch.__version__)\n",
    "torch.set_default_tensor_type(torch.FloatTensor)\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.ensemble import RandomForestRegressor\n",
    "import  utils"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "outputs": [
    {
     "name": "stdout",
     "text": [
      "situ max value:138.0469971,seawifs max value:180.867205\n"
     ],
     "output_type": "stream"
    },
    {
     "data": {
      "text/plain": "<Figure size 432x432 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "all_data = pd.read_csv(r'E:\\02Projects\\papers\\chlmodel\\data\\seawifs\\03 augment\\train_dataset-aug-features.csv')\n",
    "all_data.head(10)\n",
    "\n",
    "plt.figure(1,figsize=(6,6))\n",
    "plt.xlabel('pre values')\n",
    "plt.ylabel('real values')\n",
    "plt.xlim([0,25])\n",
    "plt.ylim([0,25])\n",
    "plt.scatter(all_data.in_situ_chl,all_data.seawifs_chlor_a)\n",
    "print(\"situ max value:{},seawifs max value:{}\".format(all_data.in_situ_chl.max(),all_data.seawifs_chlor_a.max()))"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "outputs": [],
   "source": [
    " ###  按照比例分配训练和测试数据"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%md\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "from sklearn.model_selection import train_test_split\n",
    "percent = 0.8 # 80% 的数据将用于训练，20%的数据用于测试\n",
    "\n",
    "all_features =pd.DataFrame(data=None, columns=(all_data.iloc[:,1:-2]).columns)\n",
    "\n",
    "\n",
    "X_train_g = None;\n",
    "X_test_g = None;\n",
    "y_train_g = None;\n",
    "y_test_g = None;\n",
    "\n",
    "feature_num = -2\n",
    "\n",
    "feature_cols = None\n",
    "# 数据等值间隔\n",
    "gapValList = [0,0.04,0.08,0.16,0.32,0.64,1.28,2.56,5.12,10.24,20.48, 40.96,1000]\n",
    "for row in range(0,4):\n",
    "    for col in range(0,3):\n",
    "        idx = row*3 + col\n",
    "        curCHL = all_data[(all_data.in_situ_chl < gapValList[idx+1]) & (all_data.in_situ_chl > gapValList[idx])]\n",
    "        X,y = curCHL.iloc[:,1:feature_num].values,curCHL.iloc[:,-2:-1].values\n",
    "        feature_cols = curCHL.iloc[:,1:feature_num].columns\n",
    "        X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)\n",
    "        if(X_train_g is None):\n",
    "            X_train_g = np.array(X_train)\n",
    "            X_test_g = np.array(X_test)\n",
    "            y_train_g = np.array(y_train)\n",
    "            y_test_g = np.array(y_test)\n",
    "        else:\n",
    "            X_train_g = np.append(X_train_g,X_train,axis=0)\n",
    "            X_test_g = np.append(X_test_g,X_test,axis=0)\n",
    "            y_train_g = np.append(y_train_g,y_train,axis=0)\n",
    "            y_test_g = np.append(y_test_g,y_test,axis=0)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "outputs": [
    {
     "name": "stdout",
     "text": [
      "===========================\n"
     ],
     "output_type": "stream"
    }
   ],
   "source": [
    "# 构建标准化scaler\n",
    "X_All = np.append(X_train_g,X_test_g,axis=0)\n",
    "import sklearn.preprocessing as preprocessing\n",
    "scaler = preprocessing.StandardScaler().fit(X_All)\n",
    "\n",
    "print(\"===========================\")\n",
    "# 执行标准化\n",
    "X_train_g = scaler.transform(X_train_g)\n",
    "X_test_copied = X_test_g\n",
    "X_test_g = scaler.transform(X_test_g)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 随机森林方法"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "outputs": [
    {
     "name": "stderr",
     "text": [
      "D:\\Users\\ASUS\\anaconda3\\envs\\deeplab\\lib\\site-packages\\ipykernel_launcher.py:18: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n"
     ],
     "output_type": "stream"
    },
    {
     "name": "stdout",
     "text": [
      "explained variance score:0.9770809089723714,\nmean absolute error:0.17031303853006707,\nmean squared error:0.3532560648884005,\nmean squared log error:0.0022399903467466647 \nmedian_absolute_error:0.027656139999999968, \nr2Score:0.9770313198460094\n"
     ],
     "output_type": "stream"
    },
    {
     "data": {
      "text/plain": "               importance\nrrs555/rrs490    0.364506\nrrs510/rrs555    0.265774\nrrs555/rrs510    0.259877\nrrs490/rrs555    0.040569\nrrs670/rrs490    0.020008\nrrs510           0.011093\nrrs490/rrs510    0.009831\nrrs510/rrs490    0.006291\nrrs490           0.005217\nrrs555/rrs670    0.002390\nrrs670/rrs510    0.002303\nrrs510/rrs670    0.002083\nrrs670           0.001963\nrrs490/rrs670    0.001713\nrrs555           0.001554\nrrs555/rrs443    0.001119\nrrs670/rrs555    0.000664\nrrs670/rrs443    0.000540\nrrs510/rrs443    0.000526\nrrs490/rrs443    0.000461\nrrs443/rrs555    0.000350\nrrs443           0.000337\nrrs670/rrs412    0.000136\nrrs443/rrs490    0.000128\nrrs443/rrs670    0.000106\nrrs443/rrs510    0.000105\nrrs490/rrs412    0.000094\nrrs412           0.000060\nrrs412/rrs490    0.000042\nrrs443/rrs412    0.000031\nrrs510/rrs412    0.000029\nrrs412/rrs443    0.000029\nrrs412/rrs670    0.000019\nrrs412/rrs555    0.000018\nrrs555/rrs412    0.000017\nrrs412/rrs510    0.000015",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>importance</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>rrs555/rrs490</th>\n      <td>0.364506</td>\n    </tr>\n    <tr>\n      <th>rrs510/rrs555</th>\n      <td>0.265774</td>\n    </tr>\n    <tr>\n      <th>rrs555/rrs510</th>\n      <td>0.259877</td>\n    </tr>\n    <tr>\n      <th>rrs490/rrs555</th>\n      <td>0.040569</td>\n    </tr>\n    <tr>\n      <th>rrs670/rrs490</th>\n      <td>0.020008</td>\n    </tr>\n    <tr>\n      <th>rrs510</th>\n      <td>0.011093</td>\n    </tr>\n    <tr>\n      <th>rrs490/rrs510</th>\n      <td>0.009831</td>\n    </tr>\n    <tr>\n      <th>rrs510/rrs490</th>\n      <td>0.006291</td>\n    </tr>\n    <tr>\n      <th>rrs490</th>\n      <td>0.005217</td>\n    </tr>\n    <tr>\n      <th>rrs555/rrs670</th>\n      <td>0.002390</td>\n    </tr>\n    <tr>\n      <th>rrs670/rrs510</th>\n      <td>0.002303</td>\n    </tr>\n    <tr>\n      <th>rrs510/rrs670</th>\n      <td>0.002083</td>\n    </tr>\n    <tr>\n      <th>rrs670</th>\n      <td>0.001963</td>\n    </tr>\n    <tr>\n      <th>rrs490/rrs670</th>\n      <td>0.001713</td>\n    </tr>\n    <tr>\n      <th>rrs555</th>\n      <td>0.001554</td>\n    </tr>\n    <tr>\n      <th>rrs555/rrs443</th>\n      <td>0.001119</td>\n    </tr>\n    <tr>\n      <th>rrs670/rrs555</th>\n      <td>0.000664</td>\n    </tr>\n    <tr>\n      <th>rrs670/rrs443</th>\n      <td>0.000540</td>\n    </tr>\n    <tr>\n      <th>rrs510/rrs443</th>\n      <td>0.000526</td>\n    </tr>\n    <tr>\n      <th>rrs490/rrs443</th>\n      <td>0.000461</td>\n    </tr>\n    <tr>\n      <th>rrs443/rrs555</th>\n      <td>0.000350</td>\n    </tr>\n    <tr>\n      <th>rrs443</th>\n      <td>0.000337</td>\n    </tr>\n    <tr>\n      <th>rrs670/rrs412</th>\n      <td>0.000136</td>\n    </tr>\n    <tr>\n      <th>rrs443/rrs490</th>\n      <td>0.000128</td>\n    </tr>\n    <tr>\n      <th>rrs443/rrs670</th>\n      <td>0.000106</td>\n    </tr>\n    <tr>\n      <th>rrs443/rrs510</th>\n      <td>0.000105</td>\n    </tr>\n    <tr>\n      <th>rrs490/rrs412</th>\n      <td>0.000094</td>\n    </tr>\n    <tr>\n      <th>rrs412</th>\n      <td>0.000060</td>\n    </tr>\n    <tr>\n      <th>rrs412/rrs490</th>\n      <td>0.000042</td>\n    </tr>\n    <tr>\n      <th>rrs443/rrs412</th>\n      <td>0.000031</td>\n    </tr>\n    <tr>\n      <th>rrs510/rrs412</th>\n      <td>0.000029</td>\n    </tr>\n    <tr>\n      <th>rrs412/rrs443</th>\n      <td>0.000029</td>\n    </tr>\n    <tr>\n      <th>rrs412/rrs670</th>\n      <td>0.000019</td>\n    </tr>\n    <tr>\n      <th>rrs412/rrs555</th>\n      <td>0.000018</td>\n    </tr>\n    <tr>\n      <th>rrs555/rrs412</th>\n      <td>0.000017</td>\n    </tr>\n    <tr>\n      <th>rrs412/rrs510</th>\n      <td>0.000015</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "metadata": {},
     "output_type": "execute_result",
     "execution_count": 6
    },
    {
     "data": {
      "text/plain": "<Figure size 432x432 with 3 Axes>",
      "image/png": "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\n"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.linear_model import ElasticNet, Lasso,  BayesianRidge, LassoLarsIC\n",
    "from sklearn.ensemble import RandomForestRegressor,  GradientBoostingRegressor\n",
    "from sklearn.kernel_ridge import KernelRidge\n",
    "from sklearn.pipeline import make_pipeline\n",
    "from sklearn.preprocessing import RobustScaler\n",
    "from sklearn.base import BaseEstimator, TransformerMixin, RegressorMixin, clone\n",
    "from sklearn.model_selection import KFold, cross_val_score, train_test_split\n",
    "\n",
    "n_folds = 5\n",
    "\n",
    "def rmsle_cv(model):\n",
    "    kf = KFold(n_folds, shuffle=True, random_state=42).get_n_splits(X_train_g)\n",
    "    rmse= np.sqrt(-cross_val_score(model, X_train_g, y_train_g, scoring=\"neg_mean_squared_error\", cv = kf))\n",
    "    return(rmse)\n",
    "\n",
    "import seaborn as sns; sns.set_theme(color_codes=True)\n",
    "rfr=RandomForestRegressor()\n",
    "rfr.fit(X_train_g,y_train_g)\n",
    "predictVal = rfr.predict(X_test_g)\n",
    "y_test_t = y_test_g.flatten()\n",
    "utils.plotPicturesEx(y_test_t,predictVal,'RF')\n",
    "utils.accuracyAssessment(y_test_g,predictVal)\n",
    "importance = pd.DataFrame(data=rfr.feature_importances_,index=feature_cols,columns=['importance'])\n",
    "importance.sort_values('importance',inplace=True,ascending=False)\n",
    "importance.head(36)\n",
    "# score = rmsle_cv(rfr)\n",
    "# print(\"LGBM score: {:.4f} ({:.4f})\\n\" .format(score.mean(), score.std()))\n",
    "\n",
    "#\n",
    "# tips = sns.load_dataset(\"tips\")\n",
    "# tips.head(10)\n",
    "# ax = sns.regplot(x=\"total_bill\", y=\"tip\", data=tips)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "### 支持向量机"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "outputs": [
    {
     "name": "stderr",
     "text": [
      "D:\\Users\\ASUS\\anaconda3\\envs\\deeplab\\lib\\site-packages\\sklearn\\utils\\validation.py:72: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n  return f(**kwargs)\n"
     ],
     "output_type": "stream"
    },
    {
     "name": "stdout",
     "text": [
      "explained variance score:0.8818106401726024,\nmean absolute error:0.3882367091886166,\nmean squared error:1.8550776247610092,\nmean squared log error:0.012996612648039519 \nmedian_absolute_error:0.07680375291702501, \nr2Score:0.8793830060994966\n"
     ],
     "output_type": "stream"
    },
    {
     "data": {
      "text/plain": "(0.8818106401726024,\n 0.3882367091886166,\n 1.8550776247610092,\n 0.012996612648039519,\n 0.07680375291702501,\n 0.8793830060994966)"
     },
     "metadata": {},
     "output_type": "execute_result",
     "execution_count": 8
    },
    {
     "data": {
      "text/plain": "<Figure size 432x432 with 3 Axes>",
      "image/png": "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LyU/Px+AsWPHsnjxYmbMmJGsZoiISBeWtGtC1dXVFBcX88gjj/CnP/2Jp59+mn379lFYWJg4p6ioiIMHDyarCSIi0sUlLYRGjhzJnDlzyMnJoWfPnkyZMoV58+Y1KY5p27a2MxARSWNJm45bt24dkUiE4uJiIB44ffv2paysLHFOWVkZRUVF7XrdiopaLCt9yt0VFuZQVlbjdDM6lfqc+tKtv0Bih+e2SqXPutb6nrSRUE1NDXPmzCEUClFbW8vChQv55S9/yZo1azh8+DD19fUsWbKEq666KllNEBGRLi5pI6FrrrmG9evXc/3112NZFt/4xjcYNWoUd9xxB9OnTycSiTBlyhSGDx+erCaIiEgX1+22ckilIWpbpOu0hfqc2tKtv6DpuONRxQQREXGMQkhERByjEBIREccohERExDEKIRERcYxCSEREHKMQEhERxyiERETEMQohERFxjEJIREQcoxASERHHKIRERMQxCiEREXGMQkhERByjEBIREccohERExDEKIRERcYxCSEREHKMQEhERxyiERETEMQohERFxjEJIREQcoxASERHHKIRERMQxCiEREXGMQkhERByjEBIREccohERExDEKIRERcYxCSEREHKMQEhERxyiERETEMQohERFxjEJIREQcoxASERHHKIRERMQxCiEREXGMQkhERByjEBIREccohERExDEKIRERcYxCSEREHKMQEhERxyiERETEMQohERFxjEJIREQcoxASERHHKIRERMQxCiEREXGMQkhERByjEBIREccohERExDEKIRERcUzSQ+iBBx5g1qxZAGzcuJHJkyczduxYfvKTnxCNRpP99iIi0oUlNYTWrFnDwoULE49/+MMfcs899/Daa69h2zbPPPNMMt9eRES6uKSFUGVlJQ8++CDf+973ANi7dy/BYJALLrgAgMmTJ7N48eJkvb2IiHQD7mS98D333MMdd9zB/v37ATh06BCFhYWJrxcWFnLw4MF2v26vXtkd1sbuorAwx+kmdDr1OfWlW3/bK10+65ISQs8++yx9+vShuLiYBQsWAGBZFoZhJM6xbbvJ47aqqKjFsuwOa2tXV1iYQ1lZjdPN6FTqc+pLt/5C+0M3lT7rWut7UkLolVdeoaysjEmTJlFVVUVdXR2GYVBWVpY4p7y8nKKiomS8vYiIdBNJCaEnnngi8d8LFizg3Xff5b777mPChAm8//77jBo1ihdeeIGrrroqGW8vIiLdRNKuCbVk7ty5zJ49m9raWs4991ymT5/emW8vIiJdjGHbdreadEyledK2SNe5c/U5taVbf0HXhI5HFRNERMQxCiEREXGMQkhERByjEBIREccohERExDEKIRERcYxCSEREHKMQEhERxyiERETEMQohERFxjEJIREQcoxASERHHKIRERMQxCiEREXGMQkhERByjEBIREccohERExDEKIRERcYxCSEREHKMQEhERxyiERETEMQohERFxjEJIREQcoxASERHHKIRERMQxCiEREXGMQkhERByjEBIREce4nW6AdE0btpWzeO0uyquCFOT5KR09gOGDCpxuloikGIWQNLNhWznzl27GNF1k+t1UBsLMX7oZQEEkIh1K03HSzOK1uzBNFz6PiWEY+Dwmpuli8dpdTjdNRFKMQkiaKa8K4nU3/dXwul2UVwUdapGIpCqFkDRTkOcnHLWaHAtHLQry/A61SERSlUJImikdPYBYzCIUiWHbNqFIjFjMonT0AKebJiIpRgsTpJmGxQdaHSciyaYQkhYNH1Sg0BGRpNN0nIiIOEYhJCIijlEIiYiIYxRCIiLiGIWQiIg4RiEkIiKOUQiJiIhjFEIiIuIYhZCIiDhGISQiIo5RCImIiGMUQiIi4hiFkIiIOEYhJCIijlEIiYiIYxRCIiLiGIWQiIg4Jqkh9NBDDzFu3DjGjx/PE088AcDq1auZOHEiY8aM4cEHH0zm24uISBeXtO293333Xd555x1efPFFotEo48aNo7i4mLvuuosnn3ySPn36cOutt7JixQpKSkqS1QwREenCkjYSuuSSS/jzn/+M2+2moqKCWCxGdXU1AwcOpH///rjdbiZOnMjixYuT1QQREeni2jwSCofD7N27F9M06dOnDx6P54TP8Xg8zJs3jz/+8Y+UlpZy6NAhCgsLE18vKiri4MGD7Wpwr17Z7To/FRQW5jjdhE6nPqe+dOtve6XLZ90JQ2jTpk08/PDDrFy5Ep/Ph2mahMNhrrnmGm699VYGDx7c6vNnzpzJd77zHb73ve+xY8cODMNIfM227SaP26KiohbLstv1nO6ssDCHsrIap5vRqdTn1Jdu/YX2h24qfda11vdWQ+h///d/WbduHVOmTOHee+8lLy8PgNraWlatWsW9997LxRdfzIwZM5o9d9u2bYTDYc455xwyMjIYM2YMixcvxjTNxDllZWUUFRWdbL9ERKSba/Wa0ODBg/njH//IuHHjEgEEkJ2dTWlpKf/3f//H0KFDW3zunj17mD17NuFwmHA4zLJly5g6dSrbt29n586dxGIxFi1axFVXXdWxPRIRkW6j1ZHQddddd9yvbdmyhbPPPvu455SUlLBhwwauv/56TNNkzJgxjB8/np49e3L77bcTCoUoKSmhtLT01HogIiLdlmHb9klNOl544YV88MEHHd2eE0qledK2SNe5c/U5taVbf0HXhI7npJdon2R2iYiIJJx0CLV3VZuIiMixVDtOREQc0+rChJEjR7Y44rFtm2AwmLRGiYhIemg1hBYtWtRZ7RARkTTUagj9v//3/7j66qu57rrrOOusszqrTSIikiZaDaHHH3+cN954g9/85jfs2rWLSy+9lC9+8YuMGjVKCxNEROSUtfk+oXA4zJo1a1i2bBkffvgh559/Pv/93/+d7PY1k0pr59siXe+nUJ9TW7r1F3Sf0PG0uYq21+ulpKQksffPhg0bTr1lIiKS1toUQtdee22T6TfDMMjIyODss89m1qxZKkIqIiInpU0hdN111xEIBJg2bRoul4vnnnuOQCDAkCFDuOeee/jd736X7HaKiEgKatPNquvWrePee+9l2LBhDB06lNmzZ7Nlyxa+9a1vsXfv3mS3UUREUlSbQigQCFBbW5t4XFtbq5tVRUTklLVpOu6GG27gxhtvpLS0FNu2WbJkCV/96ld58skn+cIXvpDsNoqISIpqUwh997vf5ZxzzmHlypW43W7uvvtuLr30Uj755BO+8pWvJLuNIiKSotq8RHvo0KH06dMn8Xjr1q2cd955SWmUiIikhzaF0H333cf8+fPJyYnfcGTbNoZhsGbNmqQ2TkREUlubQmjp0qW89dZb9OjRI9ntERGRNNKm1XFnnHEGubm5yW6LiIikmTaNhG666Sa++c1vMnr0aNzuz58yY8aMpDVMRERSX5tC6LHHHiM7O5uamvQqOCgiIsnVphCqr6/nr3/9a7LbIiIiaaZN14TOPPNMNm3alOy2iIhImmnTSGj//v1MmTKFvn374vV6E8dfeumlpDVMRERSX5tC6D/+4z+S3Q4REUlDrYbQ6tWrueyyy7jkkkuOe86qVau44oorOrxhIiKS+lq9JrR6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+usxTZMxY8Ywfvx4evbsmbJ9bsncuXOZPXs2tbW1nHvuuUyfPt3pJnWoa665hvXr13P99ddjWRbf+MY3GDVqVFp+jp2IqmiLiIhjusV0nIiIpCaFkIiIOEYhJCIijlEIiYiIYxRCIiLiGIWQpKSRI0eyZ88ePv74Y2bOnNnquRs2bOCee+5pcuyXv/wlq1at6rD2VFdXM3XqVPbs2cPIkSNbPOf111/nkUce6bD3FOkOFEKS0s4//3zmzZvX6jlbt25tUsPro48+Ytu2bVxxxRUd1o433njjhDcmXnfddaxbt46NGzd22PuKdHXd4mZVSW1r165l7ty5nH766Xz22Wf4/X7uv/9+Hn/8cSorK9m9ezdXX301P/jBD5g7dy7vvfcesViMYcOGMXv2bLKzs1m3bh0///nPMQyD888/H8uyEq/985//nEWLFhEIBPjFL37BBx98gGmaXHfddXz9619n3rx51NTU8OMf/5j77ruP3/zmN3zzm99MPP9Xv/oVffr0Yfv27WRkZPDd736XJ598ku3btzNmzBjuuusuAB577DGee+45srKyuOiii1i2bBnLly8HYNmyZcyYMeOE34spU6bw8MMPa0QkaUMjIekSPvnkE2666SZeeuklJk+ezA9/+EMAgsEgL7/8Mj/84Q957LHHME2TBQsW8OKLL1JUVMTcuXMJh8P84Ac/YNasWTz//POMHj2aYDDY7D3mzZtHKBTilVde4fnnn+eDDz5g165dzJw5k4suuoj77ruP6upq3n//fS6//PLE8z7++GO++93v8sILL5Cdnc1jjz3Go48+yoIFC/jLX/7CwYMHeeutt1iwYAHPPfccCxYsIBAIJJ4fDofZuXMngwcPPuH34fLLL2flypUttl8kFSmEpEsYOnRoYhuLG264gY0bN1JZWcmoUaMS57z55pssX76c66+/nkmTJvH666+zbds2Nm/ejNvtThSLnDBhAllZWc3eY/Xq1UyZMgXTNPF6vTz11FOMHj26yTk7d+6ksLAQr9ebONavXz+GDRsGwIABAxg9ejRer5eePXuSlZVFVVUVK1asoLS0lNzcXAzDYNq0aYnnr1mzpkkV6dbk5+fj8/nYu3dvG79zIt2bpuOkS2hcRbqBy+UiMzMz8diyLO666y5KSkoACAQChEIh9u3bx7HVp9zu5r/abre7Sen8/fv34/f7m5xjGEZiKq9B40Bq7bUbt6Fxf15//XW+/OUvN3vO8Zim2eL3QyQVaSQkXcKmTZvYtGkTAH/7298YOXJkYhO0BldccQXz588nHA5jWRZ33303v/rVrxgyZAi2bbNixQogfv2lqqqq2XsUFxezcOFCLMsiHA4zc+ZM3nvvPUzTJBqNAvGRTkVFBaFQqF3tLykpYcmSJdTU1ADw3HPPAfES/h999BEXXnhhm16npqaGcDjM6aef3q73F+muFELSJRQUFPDrX/+aiRMn8vrrrzNnzpxm59x222307duXr3zlK4wbNw7btpk1axYej4dHHnmEhx56iEmTJrF06VJ69erV7PkzZszA4/EwadIkrr/+ekpKShgzZgwXXHABu3fvZsaMGeTm5jJq1CjeeeeddrW/uLiYG2+8ka997WtMnjyZmpoaMjIyWL9+Peedd16TkU1dXR0jR45szBn2IwAAALdJREFU8u/TTz8FYNWqVVx99dXNRl8iqUpVtMVxjVewdQUffPABv/vd73jsscfa/JyPP/6YDz/8MLElwRNPPMH69ev59a9/3a73nj59OnfddRdDhw5t1/NEuiuNhESOceGFF3LmmWeycuXKNj/nzDPPZN26dUyYMIGJEyeyZs0afvzjH7frfZcuXcpFF12kAJK0opGQiIg4RiMhERFxjEJIREQcoxASERHHKIRERMQxCiEREXHM/wfV0/buwWOyoAAAAABJRU5ErkJggg==\n"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn import svm\n",
    "clf = svm.SVR()\n",
    "clf.fit(X_train_g, y_train_g)\n",
    "predictVal = clf.predict(X_test_g)\n",
    "\n",
    "# predict 值存在负数，将负数直接改为0\n",
    "predictVal = np.maximum(predictVal, 0)\n",
    "utils.plotPicturesEx(y_test_t,predictVal,defaultTitle='SVM')\n",
    "utils.accuracyAssessment(y_test_g,predictVal)\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "### GPR"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "outputs": [
    {
     "name": "stdout",
     "text": [
      "explained variance score:0.7601833887432536,\nmean absolute error:1.1064750290357703,\nmean squared error:3.823870038200708,\nmean squared log error:0.1947891687616497 \nmedian_absolute_error:0.7395796603417111, \nr2Score:0.7513722860339107\n"
     ],
     "output_type": "stream"
    },
    {
     "data": {
      "text/plain": "(0.7601833887432536,\n 1.1064750290357703,\n 3.823870038200708,\n 0.1947891687616497,\n 0.7395796603417111,\n 0.7513722860339107)"
     },
     "metadata": {},
     "output_type": "execute_result",
     "execution_count": 9
    },
    {
     "data": {
      "text/plain": "<Figure size 432x432 with 3 Axes>",
      "image/png": "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IqNYwUJo+/btAHz+85+nvb2dq6++mrKyMpYsWUJ1dTUAl1xyCWvXruWmm24q1DBERGQUK9g9oY6ODpYuXcqPfvQjfvnLX3L33Xezb98+Ghoaeo5pbGykqampUEMQEZFRrmAhdNppp/Gd73yHiooKamtrWbVqFXfeeWevRpPqDi0iUtoKdjnu5ZdfJpPJsHTpUiAXOFOmTKG5ubnnmObmZhobGwf0uocOxXLNOEtEQ0MFzc3RYg9jROmcx79SO1/InfNAjKffdf2de8FmQtFolO985zukUilisRgPPfQQ//RP/8TGjRtpbW0lkUjwxBNPcP755xdqCCIiMsoVbCa0fPlyXnvtNT7xiU/gui5/9md/xhlnnMHNN9/M9ddfTyaTYdWqVSxatKhQQxARkVFuzG3lMJ6mqPko1csWOufxrdTOF3Q57ljUMUFERIpGISQiIkWjEBIRkaJRCImISNEohEREpGgUQiIiUjQKIRERKRqFkIiIFI1CSEREikYhJCIiRaMQEhGRolEIiYhI0SiERESkaBRCIiJSNAohEREpGoWQiIgUjUJIRESKRiEkIiJFoxASEZGiUQiJiEjRKIRERKRoFEIiIlI0CiERESkahZCIiBSNQkhERIpGISQiIkWjEBIRkaJRCImISNEohEREpGgUQiIiUjQKIRERKRqFkIiIFI1CSEREikYhJCIiRaMQEhGRolEIiYhI0SiERESkaBRCIiJSNAohEREpGoWQiIgUjUJIRESKRiEkIiJFoxASEZGiUQiJiEjRKIRERKRoFEIiIlI0CiERESkahZCIiBSNQkhERIpGISQiIkWjEBIRkaJRCImISNEohEREpGgKHkL/+I//yK233grA22+/zZVXXskll1zCN77xDbLZbKHfXkRERrGChtDGjRt56KGHer7+7//9v/PNb36Txx9/HM/zuPfeewv59iIiMsoVLITa29v53ve+x5e+9CUA9u7dSzKZ5NRTTwXgyiuvZO3atYV6exERGQPsQr3wN7/5TW6++Wb2798PwMGDB2loaOj5fkNDA01NTQN+3bq68mEb41jR0FBR7CGMOJ3z+Fdq5ztQpfK7riAhdN999zFp0iSWLl3Kgw8+CIDruhiG0XOM53m9vs7XoUMxXNcbtrGOdg0NFTQ3R4s9jBGlcx7/Su18YeChO55+1/V37gUJoUcffZTm5mY+/vGPE4lE6OzsxDAMmpube45paWmhsbGxEG8vIiJjREFC6Be/+EXPnx988EE2bdrEHXfcweWXX84rr7zCGWecwe9+9zvOP//8Qry9iIiMEQW7J9SX7373u9x+++3EYjE+9KEPcf3114/k24uIyChjeJ43pi46jqfrpPko1WvnOufxrdTOF3RP6FjUMUFERIpGISQiIkWjEBIRkaJRCImISNEohEREpGgUQiIiUjQKIRERKRqFkIiIFI1CSEREikYhJCIiRaMQEhGRolEIiYhI0SiERESkaBRCIiJSNAohEREpGoWQiIgUjUJIRESKRiEkIiJFoxASEZGiUQiJiHQxjGKPoPQohEREAM+DaCKjIBphCiERKXmu69IeS5FMZYs9lJJjF3sAIiLFlM64dMRTZF0P29I0aKQphESkRHnEUw6xzjSeV+yxlC6FkIiUHA+PjniGhC6/FZ1CSERKStb1iMSSZLKa/owGCiERKQmGAYm0Q0c8jesqgEYLhZCIjHseEO3M0JnM6P7PKKMQEpFxzXE9OuJpUhnnmMe8u7uN517bR8Zxqa8KsezUySyaUz+CoyxdCiERGbfSWZeOWK78+lje3d3Gwy/swLJMasoDRDrT/PrJ9wAURCNAi1VFZBzy6ExlaYsm+w0ggOde24dlmfhtCwyDgM/CskzWvrR7hMZa2jQTEpFxZaDl123RFMFA71+FftukJZIsxPDkCJoJici4kXU9WjtSA1r/U1MRIOO4vR5LZ13qq4LDPTzpg0JIRMaFVMahtSNJJuse/+DDnHfKZBzHJZ11wPNIZRwcx2Xl4ukFGqkcTpfjRGRM84BYYvDl1ydMr+Fj5O4NJdNZ6qtCfOycmSpKGCEKIREZs1wvV36dTB+7/DofJ0yvYebESvYdirH4pAmYhi4SjRSFkIiMSelsV/drZ+irT3c3Rbnnqa20RVO0dqS4bOnMoQ9Q8qIQEpExxqMz7RCND737teN6PP3qXtb/cQ+uB7ZlMG9q1fAMU/KiEBKRMcPD62q/M/Tu123RFPc+tZVdTVEAJtaG+bOPzOOE6TVq7TOCFEIiMiY4rkskniHdT/udfL22tYXfPb+j517ShxdO5OKzpxMKWEN+bRkYhZCIjHqpTK77tTPE7teptMPDL+zg1S0tAJSHfKy6YA7zp1UPxzBlEBRCIjJqeUA8mSGeGHr36/cPRrln3VZaoykATphWzVUXzKE85Bv6QGXQFEIiMioNV/m163o886d9rHvl/Z7ig5WLZ7D0QxMwDGOYRiuDpRASkVEn47hE4imyQ9z9tD2W4t71W9m5P1d8MKEmxOoL5zGxNjwcw5RhoBASkVHDMKAzlSUaz+AO8frb5m2H+O1z23tmUks+NIFLF8/AZ2sh6miiEBKRUSMST5NIZhlK/KQyDmte2Mkr7zUDUBa0ueqCOZw4vWZ4BinDSiEkIkXnui7tw1B+vedgjHue2sqhjtw2DPOmVrHqgjlUhP3DMUwpAIWQiBRVOuMQGWL5tet6PLd5H0/+YQ+u52GZBisXT2fpwomYKj4Y1RRCIlIkHvFkltgQy68jsRT3rt/Gjv0dADTWhFi9Yi6T6sqGaZxSSAohERlxWcelPZ4mmRra5bc3th/ioee2k+h6ncUnTeCjS1R8MJYohERkRGUdj0PtiSEFUDrjsGbjLl5+5yAA4aDNVcvmsGCGig/GGoWQiIwIw4BE2qEjlqa6ZvDrdPY254oPWiK54oO5U6pYtXwOlSo+GJMUQiJScJ4H0SHsfgq5DgrPv7afJ19+H8fNFR9ccvZ0zjl5+IoPDFTEMNIKGkLf//73efzxxzEMg1WrVvG5z32ODRs2cMcdd5BKpbj00ku5+eabCzkEESky1/WIxNOkhlB+HYmnuf/prWzbmys+aKgOsnrFPCbXD1/xQdBnUVHm0zYOI6xgIbRp0yZefPFFHn74YbLZLB/96EdZunQpt912G3fddReTJk3ixhtv5JlnnmHZsmWFGoaIFFE607X76RDKr9/a2coDz2wnkcrtIXTWiY1cds4M/PbwbLtgmgblYR9hvwWaCY24goXQ2WefzX/8x39g2zZNTU04jkNHRwczZsxg2rRpAFxxxRWsXbtWISQy7njEUw6xzsHvfprOOjy6cReb3s4VH4QCNlctm81JM2uHbZRBv0Vl2IdpqpquWPIOoXQ6zd69e7Esi0mTJuHzHb/9uc/n48477+TnP/85K1eu5ODBgzQ0NPR8v7GxkaampgENuK6ufEDHjwcNDRXFHsKI0zmPXY7j0hZN4cOkJnDs3xO1tce+lLb7QJSfP/ImBw51AnDCjBo+e/lJ1FQEh2WMppHbS6g87B+1nbRL5XfdcUPonXfe4Yc//CHPPvssgUAAy7JIp9MsX76cG2+8kfnz5/f7/K9+9at84Qtf4Etf+hI7d+7s9Rfued6AfwAOHYrhDnFjq7GkoaGC5uZosYcxonTOY1fW9YjEUmSybr/H1daW0doaP+px1/N44fX9PLEpV3xgGgYXnz2NcxdNwss4fT5nIAwgELCoCPlJdqZJdqaH9HoDMdAPGePpd11/595vCP3Lv/wLL7/8MqtWreJb3/oWVVVVAMRiMZ5//nm+9a1vcdZZZ3HTTTcd9dxt27aRTqdZsGABoVCIiy++mLVr12JZH1zHbW5uprGxcbDnJSKjRE/5dTw96F+cHZ1p7l+/ja17IwDUVwVZvWIuUxqGZ0ZgmQYVZX6CPhPd+xk9+r0QOn/+fH7+85/z0Y9+tCeAAMrLy1m5ciW/+tWvOPHEE/t87p49e7j99ttJp9Ok02nWrVvHpz/9aXbs2MGuXbtwHIc1a9Zw/vnnD+8ZiciI8oCOzgyRWGrQAfT2zlbuvG9zTwCdeWIjN1158rAEkEHuflJdVZCgT8UHo02/M6GLLrromN/bsmUL8+bNO+Yxy5YtY/PmzXziE5/AsiwuvvhiLrvsMmpra/nKV75CKpVi2bJlrFy5cmhnICJF47i53U8HW36dybo8+uIuXnord284FLD45HmzWTi7bljGZ3fPfvyWSq9HKcPzBvdXc/rpp/PHP/5xuMdzXOPpOmk+xsu9goHQOY8N6axLR2xw5de1tWW8ueUg9zy1lYNtCQBmTarkU8vnUF0eGPLYDCM3+ykP+UZNF23dE+rboEu0B5ldIjLmeXSmHKKDLL92PY91f9jNg+u39hQffOSsqZy3aDKmOfTAsC2DyrCfgGY/Y8KgQ2i0ljWKSOF4eHTEMz0LRwcq2pnm/qe3sWVP7t5PXWWu+GBq4zDc+zli9qMAGhvUO05E8uJ0lV+nj1N+fSzv7G7jgae3EU/mAuyM+Q1c/uGZBHxD73xg2waVoQABv6nwGWP6DaHTTjutzxmP53kkk8mCDUpERpdUJld+PZjdTzNZl8de2sWLb+aKD4J+i2svXcDsCcMz+wkHfZSHbAw0+xmL+g2hNWvWjNQ4RGQU8oB4MkN8kLufHmjt5J51W2jqKj6YObGCq1fMZfb02iEvPPXZBhXhAH5tYDem9RtCX//617ngggu46KKLmDt37kiNSURGAdfLlV8n0wMvv/Y8jxffbOKxl3aRdTxMAy48YxrLTh168cGRsx8Z2/oNoX//939n/fr1/OAHP2D37t0sWbKECy+8kDPOOEOFCSLjWDrb1f3aGfj0J5bI8MDT23j3/XYAaisCXL1iLtMnDL03ns82qQj7NfsZR/JeJ5ROp9m4cSPr1q3j1Vdf5eSTT+Z//a//VejxHWU81c7nYyyuHxkqnXPxGAbEU1li8QzuIK6/vfd+O/c9vY14IgPAafPqueLDMwn6e3/ePVbvuP7GVRbyUR48fuPk0UrrhPqWd3Wc3+9n2bJlPdsubN68eegjE5FRJRJPk0hmGeivvkzW5fFNu9nwxgEAAj6LT5w3i1Pm1g95TH6fRUXYh8/S7Gc8yiuEVqxY0evym2EYhEIh5s2bx6233qompCJjnOO6ROIZ0oNov9PU2sk9T23lQGtu24UZEyq4esWcIW+7YBoGZSGbcMCHrv6PX3mF0EUXXUQ8Hueaa67BNE3uv/9+4vE4J5xwAt/85jf513/910KPU0QKJJ1xiAyi/NrzPF56q4lHX/yg+GD56VO54LQpWEMsPvD7LCrDfmxL6TPe5RVCL7/8Mg8++GDP17fffjurVq3ijjvu4IEHHijY4ESksOLJDLFBlF/HEhkefGY77+xuA6CmIsDqYSg+MA2DsrCPcMBW3VuJyCuE4vE4sViM8vLc4rJYLKbFqiJjmOt5dHSmSaYGfvlty5527l+/jWhX8cGpc+v52LlHFx8MVMBnUVHmxx6G/nEyduT1U3PVVVdx9dVXs3LlSjzP44knnuBTn/oUd911F7Nnzy70GEVkGGUdj/Z4kmx2YNOfrOPyxKb3ef71/UAuND5+7ixOnTe04gPTNCgP+Qhp9lOS8gqhL37xiyxYsIBnn30W27b527/9W5YsWcIbb7zBJz/5yUKPUUSGgWFAZypLdBDl1wfbE9yzbgv7D+WKD6ZPKOfq5XOprRxa8UHQZ1FR5sMyVflWqvKeP5944olMmjSp5+utW7eycOHCggxKRIbfYMqvPc9j09sHeXTjLjKOi2HA8tOmsPz0qUMqPjAMqCz3E/Zrp9NSl1cI3XHHHfz617+moiJ309HzPAzDYOPGjQUdnIgMndtVfj3Q3U/jyVzxwdu7csUH1eV+rl4xl5kTK4c0nqDfor4qRKR9fCzElKHJK4SefPJJnnvuOWpqago9HhEZRulMV/udAZZfb90T4b6ntxLtzBUfLJpTx8fPnUUoMPjiA6t7q22fiX8Ytm+Q8SGvn6iZM2dSWTm0Tz8iMpI84imH2AB3P806Lk/+4X2e25wrPvD7TD724VmcNq9+0P0iDSAQsKgI+Ye8fkjGn7xC6LrrruPaa69l8eLF2PYHT7npppsKNjARGRzX84h2Dnz30+au4oN9XcUH0xrLuXrFXOqGUHxgmwblXbMf3fuRvuQVQv/2b/9GeXk50WjxGyyKyLFlXY9ILElmAOXXnufx8jsHWbNxF5msiwEsO20KF54xZdBVa4YBQb9NRTi31bbIseQVQolEgt/85jeFHouIDJJhQCKd2/10IJ2XO5MZHnx2O2/tzBUfVJXlig9mTRr85Xe7+96P39JOp3JceYXQrFmzeOeddzjxxBMLPR4RGSAPiHZm6EwOrP3Otn0R7lu/jY54GoCTZ9fyifNmD7r4wDAgFLApD+VmPwogyUdeP2379+9n1apVTJkyBb/f3/P4I488UrCBicjxOW5u99OBlF9nHZd1r+zh2T/twwP8tskVH57J6fMbBl18YFsGlWE/Ac1+ZIDyCqG/+qu/KvQ4RGSA0lmXjtjAyq9bIgnueWore5tzG8pNbSjj6hVzqa8KDWoMmv3IUPUbQhs2bOCcc87h7LPPPuYxzz//POeee+6wD0xEjsWjM+UQHUD5ted5vPJuM2s27CTdVXxw/qmTuejMqYMuPrBtg8pQgIDfVPjIoB03hP7zP/+T1atX8+EPf7inPDudTvPSSy/xn//5n8yePVshJDJCPDw64gMrv06ksjz03Hbe2N4KQGWZn08tn8OcyVWDGoNhQDjoozxkY6DZjwxNvyH013/917z22mv84Ac/4L/9t/9GY2MjruvS0tLCmWeeyV/+5V9y2mmnjdRYRUqa43pEYinSWTfv5+zY38G9T20l0lV88KFZtXzyvNmEg4MrPvDZBhXhAH5bDUdleBz3J/GUU07hpz/9KdFolF27dmEYBtOnT+/pIycihZfK5Mqv89391HFd1r2yl2de3YsH+GyTy8+ZyZknDK744MjZj8hwyevjUHt7OwBTp04FwHEc2tvbqa6uLtzIRASPXCPR+AB2Pz3UkeSedVvY01V8MKW+jNUr5lJfPbjiA59tUhH2F3z2s3lbC2tf2k1LJEl9VZCVi6ezaM7Q9iqS0S+vEFqyZAmGYfR0zwZoaGjg2WefLejgREqZ6+XKr5Pp/MqvPc/j1S0tPPzCDtKZXPHBeadM4qIzp2FbAw8Qw4CykI/yoG/Azx2ozdta+PWT72FZJuGgTXs8za+ffA9AQTTO5RVC77zzTs+f0+k0a9asYceOHQUblEipS2e7ul87+U1/Eqksv31uB69vPwRAZdjHquVzmTtlcMUHfp9FRdiHbxDhNRhrX9qNZZkEurprB3wWqa7HFULj24B/wvx+P1deeSUvvPBCIcYjUtIMAzrTWdqj+QfQzgMd/OCBzT0BdNLMGr66atGgAsg0DCrCPmoqAiMWQAAtkeRRl/v8tklLJDliY5DiGNA9IchN+c5ygTkAACAASURBVN944w06OjoKNiiRUjWQ3U8d1+OpP+7h6Vf34nngs0wuO2cGZ53YOKjiA7/PojLsx7ZGvvCgvipIezzdMxOC3Gywvmpo24fL6Dfge0IAdXV1fOMb3yjowERKSSrj0BpNkc6z/U5rR5J7129ld1MMgEl1YVavmEdjzcCLD0zDoCzsIxywi1b3tnLxdH795HukyM2A0lkXx3FZuXh6kUYkIyWvEHrrrbcwj1hVHYlECjIgkVKTzji0RhJ5B9CrW5p5+PmdPf3izl00iYvPGlzxQcBnUVHmxy7yZnPd931UHVd68gqhq666ioceeqjXY9dccw1r1qwpyKBESsHh5dc1Ncf/TzGZzvLw8zv509YWACpCPlYtn8O8qQNfKmGaBuVhH2H/4LfrHm6L5tQrdEpQvz+BN9xwA6+//jrJZJLTTz+953HXdTn55JMLPjiR8Wqg5de7DkS5d/1W2qIpABbMqOHKZbMpG0T5dNBnUVHmG3TPOJHh1G8I/ehHP6K9vZ3bbruNO+6444Mn2TYNDQ0FH5zIeJRxXCKx/KrfHNfj6Vf38tQf9+B5uS0TPrp0BosXTBhw8YFp5irfQn4LbbUto8Vx5+JTp07lzjvvPOrxjo4OdUwQGQDDgHgqSyyewc2j/UFbNMm9T21jV1MUgIm1YVZfOJcJNeEBv3fQb1EZ9h11b1ek2PoNoeuuu46HHnroqOo4AMMwePvttws+QJHxYiDl169tbeG3z+3oKT44Z+FELjl7Or4Bts6xurfa9plo9iOjUb8h1F2McHjHBBEZGNdzaY9l8qp+S6azPPLCTl7dkis+KA/5WHXBHOZPG9hVBwMIBCwqQn6sIle+ifQnr49VLS0trFu3DoDvfve73HDDDQomkTykMw6HIvmt/9ndFOWHD7zeE0AnTKvmq6sWDTiAbNOgqiJAdZkCSEa/vELo1ltv5f3332fjxo08++yzfPzjH+cf/uEfCj02kTEtnszQFksdd/sF1/X4/Qs7+LeH36Q1msK2DK44ZybXrzyB8lD+1W/dW23XVgUJ+lR8IGNDXiHU3t7OZz/7WZ599lkuv/xyrrzyShKJRKHHJjImuZ5HezxFtPP42y+0x1L8dM1bPPLcdlwPJtSE+MtPnszShRMHVP1mmwbV5QGqy/2Yg2jZI1Isea1Uy2QyZDIZnnvuOb797W+TSCTo7Ows9NhExpyM4xKJp8hmj19+sHlbrvige63Q0g9NZOXigRUfdM9+ykM+TENbbcvYk1cIXXjhhSxdupQFCxawcOFCLr/8ci6//PJCj01kzDAM6ExlieZRfp1KOzyyYSd/fK8ZgLKgzWcv/xBTagfW9802DSrL/AT8lsJHxizD8/L78T1w4AATJuQWyL3zzjuceOKJhR5bnw4diuHmucXxeNDQUEFzc7TYwxhRY/GcOzrzK79+/2CMe5/ayqGO3BYF86dVcdWyOcyYWkNrazyv9zpy9jMWjcW/46FqaKgY0PHj6Xddf+eed+OoiRMnAnDjjTfyk5/8ZOijEhkHXNelPX788mvX9Xj2tX3818t7cD0PyzRYuXg6SxdOHFCQ2JZBZThAwG9q9iPjwoC7Fx48eLAQ4xAZc9KZrt1Pj/NpNRJLce/6bezYn9uDq7EmxOoVc5lUV5b3e3XPfirCPgx070fGjwGHUJ5X70QKYvO2llHQ7t8jnnKIdaaPGwZvbD/EQ89tJ5HKzZSWnDSBS5fMGFDxgW0bVIYC+H1quSPjz4BD6Ktf/WohxiFyXJu3tfDrJ9/DskzCQZv2eJpfP/kewIgFket5RDszJFLZfo9LZRx+v2EnL7+bKz4IB22uWjaHBTNq8n4vw4Bw0Ed5yMbQmh8Zp/IKoUQiwdq1a4lEIniexy9+8QsAPve5zxV0cCKHW/vSbizL7NkCOuCzSHU9PhIhlHU8IvEkmeOUX+9tjnH3U1s5FMkVH8ybWsVVF8yhMuzP+718tkFFOIB/gL3iRMaavELolltuYe/evcyfP39AC+h++MMf8thjjwGwbNkybrnlFjZs2MAdd9xBKpXi0ksv5eabbx7cyKXktESShIO9f2T9tklL1y/7QjEMSKQdOuLpfquVXM/j+df28+TL7+O4ueKDS86ezjkn51980D37qRhApwSRsSyvEHr33Xd59NFHse38r95t2LCB559/noceegjDMPiLv/gL1qxZw3e/+13uuusuJk2axI033sgzzzzDsmXLBn0CUjrqq4K0x9M9MyGAdNalvipYsPf0PIgmMnQm++9+EImnuW/9VrbvyxUfNFQHWb1iHpPr8y8+8NkmFWG/Zj9SUvL6ae8uzx6IhoYGbr31Vvx+Pz6fjzlz5rBz505mzJjBtGnTsG2bK664grVr1w74taU0rVw8HcdxSWUcPM8jlXFwHJeVi6cX5P0c16M9liKe6D+A3tzRyp33b+4JoLMXNPLlK0/OO4AMA8qCPuoqgwogKTl5TW3mz5/P9ddfz3nnnUcw+MGnzv7uCc2bN6/nzzt37uSxxx7j2muv7bUja2NjI01NTQMacF1d+YCOHw8GushtPOjrnC9sqKCqKsyDT2/lYGsnjbVhrrxgLmcumDDs759IZWiPpiirCHKsKEmlHe5b9x7Pv7YPgLKQj+suXcCp8/PfddhnmVSW+QkGbKgIDMPIx45S/LkeiFL5XZdXCMXjcWbMmMHu3bsH/AZbtmzhxhtv5JZbbsGyLHbu3NnzPc/zBrxF8XhaRZyPUl1ZfqxznlEf5uZVi3o91texgy/lzq/8el9LnLvXbem5HzVnSiWfumAulWX+vDofmIZBWcjGF/QR7UgQLLG/51L9uR6I8fS7btAdE772ta/x/e9/nzfeeGNQb/zKK6/w1a9+ldtuu43LLruMTZs20dzc3PP95uZmGhsbB/XaIscy2FJuD4+OeP/l167n8cLr+3li0wfFBx85axrnLpqUd/GB32dRGfZjWyq7Fuk3hL7whS8A8Ld/+7cDfuH9+/fz5S9/me9973ssXboUgFNOOYUdO3awa9cupk6dypo1a7jqqqsGMWwpNQOZ2QymlDvrekRiKTJZ95hj6Iinuf/pbWzdGwFyhRKrL5zHlDzv/ZiGQVnYRzhga9WPSJd+Q2jhwoUAnH322QN+4Z/97GekUim+/e1v9zz26U9/mm9/+9t85StfIZVKsWzZMlauXDng15bSMtCZzUBKufMtv357ZysPPLOdzq5Z0lknNnLZ0hn4D6vU60/AZ1FR5sfWTqcivQy4Y0K+br/9dm6//fY+v/fwww8X6m1lHBrozCbfUm4PiHb2X36dzjo89uJuXnorV0ATCth88vzZLJxVm9fYTdOgPOQjpNmPSJ8KFkIiw2Wgi1RXLp7Or598j1TXcemse1Qpt+N6RONpkv10v95/KM7d67bS3J7bRXj25Eo+dcEcqsrzq2IL+Cwqy3xYpsquRY5FISSj3kAXqXbPjo51DymddemIHbv7tet5bHj9AI9v2o3jepiGwUfOmsp5iyZj5nE5zTQNysM+wn795yVyPPqvREa9fGY2R1o0p76PS3UenSmHaD/l19HOXPHBlj254oO6qiCrl89lamN+azaCfovKsA9Tsx+RvCiEZNQ73swmH/mUX7+zu40Hnt5GPJk75owTGrj8nJm9ZmDHYnXNfkJ+C3T3RyRvCiEZE/qe2eTneOXXmazLYy/u4sWu4oOg3+KT58/m5Nl1eb1+MGBRGdLsR2QwFEIyriUz/ZdfH2jt5O51WzjYlis+mDmpgquXz6U6j+IDyzSoKPMT9Jlo9iMyOAohGZc8INZP92vP89j45gHWvrSbrONhGnDRmdM4/5TjFx8YQCBgURHyY2ndj8iQKIRk3HE9j454mmS67/LraGeaB57ZznvvtwNQWxFg9YVzmdZ4/N5etmlQrtmPyLBRCMm4ks66dMRTZJ2+L7+9u7uN+5/ZTjyRAeD0+fVccc4sAv7+iw8MA4J+m4qwL+8ecSJyfAohGSf6L7/OZF0e37SbDW8cAHLFBx8/dxanzD1+sYPdfe/Hb/XbWVtEBk4hJKNaPo1LPbyu9jt9l18faO3k3qe2cqC1E4AZE3PFBzXH2b/HMHJtespDudmPAkhk+CmEZNTKp3Gp47pEYmnSfZRfe57Hi2818diLu3qKD1acMZULTp1y3OID2zKoDPsJaPYjUlAKIRm1jte4NNVVfu30UX4dS2R48JltvLM7V3xQUxFg9Yq5TJ/Qf/GBZj8iI0shJKPWsRqXJlJZYskM8UTf5ddb9rRz//ptRLuKD06dW8/Hzp1J8Di93GzboDIUIOA3FT4iI0QhJKPWkY1Lu2cpoYBNrDNz1PFZJ1d88MLrueKDgM/i4+fN4tTjFB8YBoSDPspDNgaa/YiMJIWQjFqHNy4NB2yCQZtYPMXiBROOOvZgW4J7ntrC/kO54oPpE8q5evlcaiv77rTdzbYNKsMB/LZa7ogUg0JIRq3u4oP1r+4llXZwsy7LT5vKCdNreo7xPI9Nbx/k0Y27yDguhgHLT5vC8tOn9tvN4MjZj4gUh0JIRrWT59Qxc1Jln+XX8WSGB5/Zztu72gCoLvezesU8Zkzsv/jAZxtUaPYjMioohGTUclyXSDxDuo/dT7fuiXDf01uJdt0bWjSnjo+fO4tQ4Ng/0t2zn4qQr2BjFpGBUQjJqHSs8uus4/LEH97n+c37AfD7TD724VmcNq8eo592Oj7bpCLsL7nZTz6LfUWKSSEko4oHtEdTtMdSR1WpHWxPcO+6LezrKj6Y1ljO1SvmUtdP8YFhQFnIR3mw9GY/+Sz2FSk2hZCMGt3dr8NHlEl7nsfL7xxkzYYPig8uOHUKK86YgtXPRnJ+n0VF2IfPKq3ZT7fjLfYVGQ0UQiVqtF2myTgukViu+3X4sMc7kxkefHY7b+3MFR9Ulfm5esVcZk2qPOZrmYZBWcgmHPSVdN3bsRb7tkSSRRqRyNEUQiVoNF2mMQyIp7LE4hncI66/bdsX4b712+iIpwE4eXYtnzhvdr/FB36fRWXYj22VcvzkHLnYF3JbXdRX9b92SmQkKYRK0Ehfpulv1hWJp0kksxweP1nHZe1Lu3nutX145D69X/HhmZw+v+GYxQemYVAW9hEO2CU9+znc4Yt9/bZJOuviOC4rF08v9tBEeiiESlC+l2mG45JdX7Ouu9dtwbZNJtaWHVV+3dKe4F8ffpPdB6IATG0oY/WKedT18+k94LOoKPNja6vtXrr/rkbTZVeRIymESlA+l2mG65LdkbOuirAPv8/isY27uObiE3qO8zyPV95tZs2GnaSzLgaw7NTJTGss56Fnt9EWTVFTEeC8Uyb3dEwwTYPykI+QZj/HtGhOvUJHRrXSLBsqcSsXT8dxXFIZB8/zSGWcoy7THB4ehmEQ8FlYlsnal3YP6L1aIsmetTnhgEU44CMaT7OvJd5zTCKV5Tf/tYUHn91OOutSUxHgzy8/iRkTK1izcScdiQzBgE1HIsPDL+zgvffbCPgs6ioDuvwmMsZpJlSC8rlMM1yVVfVVQSKdacpDPiLxNE2t7TgumAb89JE3mTetmhffbCLSVXywcFYtn/vYQlKJND995E0sy8RvW13vb2EFbN7e1cb5p0wZyv8FIjJKKIRK1PEu0wxXZdVHl8zgt8/voLktQSSW7ilAcD3Y0xxn+/7cvR+fbXLFOTM544QGykI+Uok0bdEUwa5KONM0qCrzY5mwq+t+kch4ZlgmuEe3rBpvdDlO+pTPJbvjMQyYM7WKrOPkNqDrfrzr391bcvt9Jl+58mTOPLGxV/VbTUWAjOMSCtjUVwdxXJeD7UmqywPDdJYio1dfPRPHI4WQ9GnRnHqu+ch8qsv8dCazVJf5ueYj8wd0kzsST9MRSxONZ6ivDmEaYBn0KscuC9qE/Rb11aGjnn/+qZOpLg/g95lEoinaY2mVGIuMM7ocJ8c02Moq13Npj33Q/bqmIkB71z0f57AEsiyDUNCmso+u1pZpcPZJE6mrDPL7jbuIdmZUYiwyDimEZFilMw6RI7pfz59WzRN/eJ/DG2IbRm63VMdxOe+UyR88Tm7dT21lEMs0+NCsOj40q24Ez0BkdPD7LJwSuCSnEJJhE09miCUyPc1HHdflqVf28vSf9uJ5uYDx2SYGYNsmDVXBXut+bNOgvMxPXVWQlpajN7ETKSWe4xZ7CCNCITSOjVSTUtfz6OhMk0x98KmttSPJPU9t5f2DMQAm14W5+sJ5NPZx78cwIOi3qQj7MA2j332BRGR8UQiNUyPVpDTjuETiKbLZ3PTH8zz+tKWFh1/YSarrUsJ5iybxkbOmYfexpYJtGlSU+Qn6raP2DxKR8U8hNE4VukmpYUBnKkv0sO7XyXSW3z63g83bDgG5Fj2rLpjDvKnVfT4/FLApD+VmPwogkd5c14US6AeiEBqnCr2XzJHdr3cdiHLPU1toj+Wq4BbMqOHKZbMp62NHU9s0qCzzE9DsR+SY0lkPv60QkjGqUHvJuK5Le/yD8mvH9Vj/xz2sfzVXfOCzTD66dAZnL2g86t6OZj8i+ctknZ6+i+OZQmicKsReMulM7v5Pd/l1a0eSe9dvZXdTrvhgUl2Yq1fMZUJN+Kjn2pZBZVizH5F8pbMuZcUexAhQCI1Tw7uXjEc8me0pv353dxuPvbiLg+0fXNr78MkTueTs6UcVH2j2IzI4maxKtGWMG469ZI4sv359ewsPPL29p++bYeRmWlv3RHhrx5967flj2waVoQABv6nwERmgUukdpxAqcf2tJco6Hu3xZE/59e6mKPet30a2q/dOwGcR9JtEOzO0diSprw7Rkcjw2Eu7qCr3c8rcegw0+xEZjLRmQjLeHWstkWUZzJlSzSvvHGT9H/fQ2pHEMAza4+meQKkq8xMO2rR0JDGM3IzJNAzqKoNYlsnTr+7l1LkNxT1BkTFMl+Nk3OtrLZEv5OPZP+2nNZLit89vB8MgnnJ6/oPItdbxEQ7kSq+drsfDIR911UFc1yPamSaeUNsdkaHQ5TgZ1zZva2Hb3g5cz8O2TarL/EysC5POumzb286hSIKs4xFLfDD7CfotKsM+Mo5LOuvgs0xsy6AslHtuIpUlnXFJZYZeCi5S6rJuaVzHVgiNMkfeo1l98YnMqD+65Dnf5/dVEdd9Gc4wAC+3bYJpGRzqSNIRT9OZyNAaTfd6TnnIpiLsJ5nK8rFzZ/Hca/uIJ7OcML2G1miK9mgK3zCVgosIdKY1E5IR1tc9mp88uJlPXzg3ryq3fPvFdV+Gq64IkEpnKQv5aYsmSWccjtW4N57MYhgGDVVBTphew8lz6qkI+/BZ5og1ShUpJdmsQkhGWF/3aBzXzbvfW7794va1xElnHcrDfkJBHy2RBJmMS3+Tf8+DRCrLBadPoSKcuyfU3RBhOErBRaS3TIls5TD+e0KMIS2R5FFtOgI+K+9+b309/8h+cZu3tZBxXKrLA+B6NLclyGZdTLP/HlWmARNrwyw5aRJlwQ8CSEQKo1SWNiiERpH6quBRawNSGSfvm/x9Pf/IfnHr/7iXKQ3lRBMZ2mIpPM/D9ehpxdNXFoUCNpPry2isCWFbSh+RkZAqkXtCBQ+hWCzG5Zdfzp49ewDYsGEDV1xxBRdffDHf+973Cv32Y8rKxdNxHJdUxsHzPFIZh2zWy/smf1/PP7xIwCN3szOVzuKzDFyPXlturzh9CqHAB1doTdOgtjJIRdhHIu1w/mHbcItIYWmd0DB47bXXuP3229m5cycAyWSS2267jbvuuotJkyZx44038swzz7Bs2bJCDmPM6Kvf20Cq4w5//t6WOI7jYVsGj2/ajW0ZTK4rx3UcOjozxDqzPdN9n20yqTbERWdOY1pjOWtf2kW0M0tluZ9EMks4kNsXSPd9REaOUyL3hAoaQvfeey9/93d/xy233ALA5s2bmTFjBtOmTQPgiiuuYO3atQohji6tvvbi+SyaU09DQwXNzdE+j+mrCq37654quYCNYZnc89RWlp82haryANv2RXuOLwva+GyD5adPBeCE6TWcMqeeijIflqmrtSLFknU9DMvEG+dhVNAQ+ta3vtXr64MHD9LQ8EErl8bGRpqamgo5hDHh4ee38/sXd+O4Hj7LJOu4PaXVFzZUAL3Lrw0Dtu/r4P+/bzMBX64abnJ9WU8odVfJVZX5CQVtDhzqpKWtk7sef6+nAs5nmwR9Jg3VoZ6Go6ZpUB72EfaraFKk2PY1x0hlHPzHKRoa60b0t43rur02OvM876iNz46nrq58uIdVVC+/3cTvX9yd61xgGriuRyyRoarcz7pX93Hhklk0NFSw7v7NBPwWjgtt0TSul/t0lMq4ZB2P5kiSu9dtpaoqTGsszaTaEIZpcuBQnIOtnb3u/QT9FjdcdhKnndDY85jftqgq9+M/bBO8YmroCt9SUmrnXGrnO1CGYRAI+KivDhV7KAU1oiE0ceJEmpube75ubm6msbGxn2cc7dChGO44amdxzxPv4Lpuz6Uvw8iVZsY6s+xvzm0W19wcZX9zrKthaALoXb5pGAbxRIbqigD3/de7zJpQTks0SWcie1QA1VQEsCyDJ1/cyYyGMqyu2Q+4RNpHR7+3wy9BlopSO+dSO18YeOimMw6pVIbm5tHx3+VQ9HfuI3rR/5RTTmHHjh3s2rULx3FYs2YN559//kgOYdRpiSSxLbNXUBjkFqrVVwV5+e0mvvN//kgkluLAoU7SGQfT+CCEDCNXVp11XMpDNq7ncfKcOg62dnKwLcGReR1LZnCyDh3xNMGARV1lgJDf7npXERktysP+noXn49mIzoQCgQDf/va3+cpXvkIqlWLZsmWsXLlyJIdQNMcqKqivCuJ0dZ52PQPTyJVNW6bBidOr+cmDm8GA6ooArR1JXC9XutnV9g3LzJVa5y6l2WQzWfY2x4knskcFm2WC67hkXYtpjWVUl/lR+IiMTtmsO+6LEmCEQuipp57q+fPSpUt5+OGHR+JtR43+erqtXDydXz/5HhVhP53JDFnHxTRMLlsynXd2t2PbRu5Snc/CMHJNRh3HwzJzsyGDXACVh/3sb4kR9Ns89tJuILd41XU92mMpDMPAZxtUlgfxXJf2eBoFkMjoVSpte1QGVUDds59tezswumYzhmH06ul2y5+dDnSvDTJ6zZKe//EGqsr9PTuZhgI2U+rLaI+mmFxfRlNbgoqwj0zGJZFM05l0aOvqfn3WiY1ctnQG37/vNarK/RiGQShg0ZnMYlsmnclsrzGq+ajI6JLVYlUZisNnP67ngQetHUlqK4OEAnavnm7HagBaXxUklsxgmSaJVJaOeJpM1iHgs7nsnBnMnlzFofYkazbuZNPbB4FcUF15/mw+NKs29xrVQUwzV8YdTWSwLYtUxqG6zJ93120RGXnaT0iG5PCO1rZtdq1+NuiIpwkF7KN6uvVl5eLp3L1uK/FMmo54CjDAMKirCvDIC7s4YVoVL77VRHN7LsxmT67kU8vncuBQnJ8+8iaZrEtNZZCm1k4M08B/xH4/+XbdFpGRlymRnVW1JL5ADu9oXRn2dS0S9chknaN6uh3Lojn13HjlIlJpBw8Dv99izuRKykI+9jbHeGTDLprbk5iGwcqzp/P5yxZw4FCcR1/chd9vUVURoCWSJJF2sA3oTGapLvNzzUdy3Rjy6botIsWhe0IyJPVVQdrjaQI+i3DQB0AklsYDqsv8R917Oda9mTMXTCActJlUH6Yi7Kc9lmJ/Syeprk9JdVVBVq+Yy9SG3CLeP77XTGNtmGzWJdqZwWfnLrWVh/38fdf9p77G2C2fGZqIFJ7rejiHrSEcrxRCBdJd9ZYiN7uwLJOq8g9mIYc78t7MgdZOfvTQG4T8FjMmV1FT7sPnt9nbHOdQ5IO1PxUhHzddeTI793fwy0ffxjMM2qO5mVHwsG7YjuOybW+EW368oVfAHTlGbc0tMrqkMy6hgEJIBqGvjtjHqjw7/N5MezRJJJ4BcuER70yTcTx2NrX3tHY3DAgHbK5cNpud+zt44g97sExoi6V6qt4aqkOEAjaJVJbWjiSWeeziA1XHiYxOmaxLKFDsURSWQmgUaIkkCQftrgq4XAD5LIOayiAt7Qk6OjM9xxoG+K3cJ6MX3zyAi0E6kyXadYxBbrHroY5kTzk3GD1l2kcWH2hrbpHRK50d/8UJCqFBOt76moGUP3ffm+mI5+4ZhQI2lWU+WiOpXjcnbcsg63gEAhYTasNYtsWuvRHSGQe7K5hsyySTdXEdj85kbs+gmgp/z30pUPGByFhRChvbje+LjQXSHTDt8XSvgNm8raXnmMMvsXXPQCzLZG1XN4PDde+Imsk6VJb5KQv5ONiaOKo6Jut4BHwWlWW5nlKdyQzJtHNUfzjLMrAtk+/8P+cwZ0oltt27/5SKD0TGhnRGISR9yCdgBlr+HPJZ1FTm2uy0tCc4cpmabUF1eSDXQy6SItqZwfOg+y1cz8PzvK5/w4SaXMgcb8tvERm9UiVQpq0QGoTDAyaRytLU2klzWyfb9kZ6ZkP1VUHSR0yl+5qBbN7Wwl2Pv4vjeUSiaWKJDEcK+i0m1JQBcLCtE+ewfRwqygKYJphGrpGpaRiUBW1WLZ8L5C79XfOR+VSX+Y9aJyQio1tHPF3sIRSc7gkNQvc9HNf1aIkk8VwPD3ANj5///m0+f9mCvMuff79hB6ZpsO9QZ689ggAsCyrDAUIBm454mngyN/sJ+S08zyOddbEtg4+dM5N3drcf8/6Uig9ExqZkWoUJ0ofugGmNpnptsGcA8WSW+9dv5e//YgnQf/mz47ocaEv2VLZBbm8gAL/PYsbECpJph6bWOJlsbtHa4hPqaYulj3rNj43ImYvISEqmxv6GdsejEBqE7iD5/n2bgQ82lrPMXLPSprZkr+O6g6j7npFhwLN/2s+bO1t7fdKxTLBNg3Aot812SyRBMu3ity1mTqzUGh6RhoTVggAAF2NJREFUEpMtgXtCCqEBOLIs2+jeWQ5wXHA9F7xcEUH38UeWaf9m3VYMg9yup0eUtYUDufY68WSW1o4Ek+rKCAU8UmlHASRSYoyufo/jXcmGUD776Bx+TNBv0RFPEw75egKla4eGniDqvqdTWeYHOKpLdW1lgF37o8S7frAMg9wi1WSWqvIAPtvkUCRJOutSGfZhGAZBn0XW8dTZWqTEBH25BezjXUmGUD4LSY/q53aoE8f1CPgtDJ/VVZadWzzaPSEyyP1PKGCzeVsL2/ZGcD2PoN+msSbEtj0dPY1H/bZJdUWAspAPw4CW9iQdkQSOm7ssF09lCSQzVJUHtLhUpAQFgxbx5NHVsuNNSZZo57PO58hjXM/DMOjVQsfzcrOZgN/CtgwCfov6qiAdXaFmGAZBf24/oR37oz0BBFAR9lFXFaSyzE/ToU6SqSxTGysI+i0Mw8Tgg/fS4lKR0lMRDvT6fTNeleRMqLtX2+EOn20cPovx2bkOBd3tcLJZl85kho7ODI6bC6aKsK+nLU4q45B1soQtkwm1IQ62J4nHetf6hwI2Ab9FIpmhLZoikcpS1xUylWV+WjuSeF5ue99kOqvFpSIlKJFME4lpndC41N8+Ot2X4QzDwADSGYfmtgQYXTMfoDWagq5ZEMChSJK2jiQeYBomPju3wHTPwRhZ57ASbiP33hgGze1JHMcl6LcxDINILI1hGIQCNrWVQdqjqVzft8oQF542WfeDREqMz7Z6Ld8Yr0oyhPpbSLr2pd1knVwLnMMDpDt0PC+32VR3D7d0xqE9lsb1cttjV4RtEimHnfujvd4zHLSpLPOTTGWIJ7K59wAS6SyWYZB1XA5FEtRWBnvtPXThklk0N/d+LREZ//w+i1hnBtfzMLs/8Y5DJXlPqL9WNvta4nTEU+TKDXprqA5hmgZW14rS1o4kHfF01xohg0n1YeLJbE/1G4DPyu1+Whb00dKeJJbI5vq7dX3f66po8ADDMGiPptRaR0Q46f+2d6/BUVXZAsf/55x+pfMkEOQhOPhEFCVAiRHuBCxvpGhCGMxVFGXq8sGacjBeqq4KDKMfmCkwpkSilCNTFtYMMIMwCIIOhYDgIIiGR4J3QCFAeEcSyLPffc790Ok2TUJIIKbTnfWryofuPqfP3p1Ur+yz915rSG90w8AZ51kTeuRICK6dyiY4+lHCmQtC1KZVb0rTMf5A5B9GgkWj4mJ9ROqdFLuJ5EQLjU4f1U11gprvLfrpvRVQg5tdk+1mXrmqDLcQouc5c7EOCO4pTOqXHOXW/Hx6ZBBqa4+QpingD2aljogXioLL4ydw1QZTVQGTSY1Yz68p0CvVRq8kCwEdTMkajZ4APr/eIj9caJStAL6ArIITQgTZLME566paF7dLEIofn+w+wadfnyagG5g1FX9Aj9gjNLBPIhcvO3F5AwSaRjsKYOgGP15xRbyX2aQSCBgRNT/sVo2UJCsNTh8n6upJT7Fit5lJS7Jwuc6DpiooioLPHwhnvYZgNVRNVWQVnBACCN55geDCp3jWo+aEysqr2LSnIlh5VA/W1qlp8OJ0+8N7hIYOTqPR7cfn17GYNaxmFYMWd9CwmJoqmDYNbRQFeqdasSeYuVLnbtoTZFDb4MUwDDRNJdEW3LRqMatoqkpSggmTphDQdVRFwfGwpOYRQgSZTSqaqsT9RvUeNRJat7O8xe00CGa+rrhYR1l5FV99d5GkBDNOtw+vL9Ai+CiAqikRtYISrCZSkyzUO3043T7MmophGOGl1k63nz6pNqY/emdERobrpQ0SQvRc40cP4svS81TVuK5/cAzrUUGo8rLzmq+5vTrrdpY3pekJZkCornNjNEtiq6kKAd0gEPhp9JOeYkVRFC5dcRHQDUxasLicSVPRNJU7Bqa2utBAavwIIdqya/8ZFKDiYnxv0ehRt+NoZdl185cqLzvDFVPrnD70VgJQiM2icUu6HbcnQFWNO/yaYYBh6CRYTZLpQAhxU9KSrNQ1erlS74l2U342PSoI2azaNV8zjODS69AOZX+z222KQjjIhEY/SXYzVVdcTcXmgsFNIbhhNdFm5pZeCbLXRwhxU1KTghn5T5yvi3JLfj5xfTvu6lIM10uBoapQ2+jB5w8E88IRXJAQWlZtMWv0SrbQ4PT9tCFVN9A0BbvVRHqyBbdPlzkeIcRNyx41CLcnQMnRS/zfyWpG3ZMR7Sb9LOIiCLU2yQ+0KMVwPaqqoirQ4PKHU/SE9Eq2omlKxK03+GnzqYGB3+CapSGEEKIjdu0/Q4PTx9Bf9KK0vDpu0/fEfBC6uu5P5RUXy9Z/R0DXMTXlYFPMWngpdVt8zW7BhQ43m1TSU4L7ftyNflRFQdGCwUpvWnptNC1WCCVEtZo1PCCF6IQQN2300L6UHqvi3ycvc//tvaPdnE4X83NCzev+uL0Bahu9+AI6uhEMKlW1bpxuHyat411NTbSQkmihqsZNo9tPeoqtKVN28HWF4NxRQDcI6JG14KUQnRCiM4y4K4OkBDM7DpyLdlN+FjEfhKpq3VhMKk63j0s1LvRmt8pC8zlX6j3hktvtoakKfXslNGW2/un2W22DF5OmErqEQTBlj6YqaGrkRymF6IQQNyN71CAmPjKEBJuZ7MyBHDpeRfn52mg3q9PF/O24Pqk2Ll52Uu/ytcjLFuIPGNS0c4ljUoIZi1mNCD4QDEz+gE5qgpW6Rg8BQwmW8rZowcCnKHh8gXBpCKfLh0lVeOW9PbJQQQjRYaE5IQAjoJNsN/PRjuO8OmNkXM0NxfxIaOKYwTS6/eiBtud8/AG9zddVVaFPmg3DMLhc52mRWSHZbmZAbzu39Eog0WbGatawW030S7czy3EvsyYNDZeGMCmAouDXjYiFCmXlVTfbXSFED2QyqeT9x+0cO1vLtpKz0W5Op4r5kdADd/QhwaJR5287yLSSrScswWrCbtO40krwgeAckNmkkj/hzjZHM6HXClcfwN9U5A5koYIQ4uaNfaA/35VXs27nce4ZlMZtcZJZO+ZHQgAD+iTe0HmqElx6rSpQXdt6AAJAgbH392t3AAnNUzUnCxWEEB0RmhMK/ZjNJv578jCS7RaK/1HG5br4+D6J2ZFQ871Bht72KKg1VrNGYoKJ2gbvtYMPkGI3Y08wc/R0DVPa+d59Um3UNHrDIyGQhQpCiI5pPicUMmnsEP7nvx5k0cr9LFlbytwZI0m0maPUws4RkyOh0N6gmkYvYHClwdvucxUgJdGCptLq3E/oGKtFIyPNRq8UW4dHMRPHDCYQ0PH4AhhGsGSE5JETQnSGQX2TmD1tOBernRT97RANrrYzwXR3MReEXv/gG1ZuDW5OdXv8VNV62pzvac6kqaQlW3G6fTg9Leu2906xcmsfO7f0ttMv3Y696T+Mjo5iHrijDzP+8+7wQoW0RIvkkRNCdJphv0jnxSce4FxVI4WrD1DX2P5/xLubmLsd5/L6b2huJdEW7Oq1stGqCrz5wtjwKMsD4eXWNzKKkVINQoibkT1qULhsTIjJpOH1B/+BHjokndn5w1n2j8MU/u0g/zt9BGlJ1mg09abEXBDqKFVRSEkKJh291jJtVYEBve3ATyvcpOCcECKaWpsTas1DQ/tS8v0l3lh1gJefziQ9JbbmnuM6CFnNGhaL2uZGVVNTBuz8CXeGn5NRjBAiVvROtfHSkw/yzrpSCv92kHkzRpIaQyOimJsTaq/URAtgUN/Y8j+J0F7jZLuZOwemMstxrwQdIUTMun1gKnOeHEFtg5eiNbG1WCHugpBJU0hLtlDv8uHxtbz9ZtIUzCaVWzMSWVrwH7zyzEgJQEKImHfnwFRefGI4lZedvLv+cIukyt1VXN2OS7SZUBSoqW+5UiSU9aBXio1AQCd//B1RaKEQQrRPawsTriW0YOHOwb14duJQPvz0CJv2VjAp6xdAcGrCuE7qsmiJiyCkKpCaZKXR5cPbSvoeqzmY+dpq1khLtMhCAyFEt9fehQmt6d/bzqdfncLr8WMxa0waOwSL2j2TnsZ8ELKaNew2E7UN194vNKR/igQeIUSPcfetqVyodnKh2tntc8zFdBBKtpvRdeOae39CLtW4WPfFcVZu/UGWXAsh4l4wK4xCfQwsUIjJIKSpSvj2m8fXMvPB1arrgkFKVeFyvYfy89/heHgwU8bd3uLY5jnpJGAJIaKlI3NCV/P6AmzeW8HQ29KZ+MiQiE2uXak9c1FRCUKbNm3ivffew+/38+tf/5oZM2a0+1yrRSMt2cKVek9EFdX20HVQFQOf32DD7lOUHP0xojxDKFuCpqkRdYAACURCiC51M3NCFZX1GAbU1LnYsudkJ7es/dozF9XlS7QrKytZsmQJq1evZsOGDaxZs4bjx4+3+3yzSaO6tuMBKKT5aT/WuCOKzW3ZdxpNU7GaNRRFwWrW0DSVLftO39C1hBCiq7k8fo6cukJakoXeMZC5v8tHQnv27OHhhx8mLS0NgMcff5wtW7Ywe/bsdp1vNav07ZXQKW3RVIX0VBv7/l3JiLsyMIB+6XaUZqVzDcPA5fGjRnFlSTSvHS3S5/jX0/rbFQzDYN+/K9ENg8y7+kR8l3VXimEYNzakuEHvv/8+TqeTOXPmALB27VrKyspYuHBhVzZDCCFEN9Dlt+N0XW8x0oiFaC2EEKLzdXkQ6tevH5cuXQo/vnTpEn379u3qZgghhOgGujwIPfLII+zdu5fLly/jcrnYunUrv/zlL7u6GUIIIbqBLl+YcMsttzBnzhxmzpyJz+cjPz+fBx54oKubIYQQohvo8oUJQgghREjclXIQQggROyQICSGEiBoJQkIIIaJGgpAQQoiokSAkhBAiamImCG3atIlJkyaRk5PDqlWrot2cn01DQwOTJ0/m7NmzQDDXXm5uLjk5OSxZsiTKret87777Lg6HA4fDQWFhIRD/fV66dCmTJk3C4XCwYsUKIP77DPDGG28wd+5cAI4cOcK0adN4/PHH+d3vfoff749y6zrfc889h8PhIC8vj7y8PEpLS3vM91iHGDHg4sWLxoQJE4wrV64YjY2NRm5urnHs2LFoN6vTHTp0yJg8ebJx3333GWfOnDFcLpeRnZ1tnD592vD5fMasWbOMnTt3RruZnearr74ynnrqKcPj8Rher9eYOXOmsWnTprju8759+4zp06cbPp/PcLlcxoQJE4wjR47EdZ8NwzD27NljjBkzxnj11VcNwzAMh8NhHDx40DAMw5g3b56xatWqaDav0+m6bowbN87w+Xzh53rK91hHxcRIqHnmbbvdHs68HW8++ugjXn/99XAao7KyMm677TYGDRqEyWQiNzc3rvqdkZHB3LlzsVgsmM1m7rjjDk6dOhXXfX7ooYf4y1/+gslkorq6mkAgQF1dXVz3uaamhiVLlvCb3/wGgHPnzuF2uxkxYgQA06ZNi6v+Apw4cQKAWbNmMWXKFFauXNljvsc6KiaC0I8//khGRkb4cd++famsrIxii34ef/zjHxk9enT4cbz3+6677gp/EZ06dYp//vOfKIoS130GMJvNFBcX43A4yMrKivvf82uvvcacOXNISUkBWv5dZ2RkxFV/Aerq6sjKymLZsmV8+OGH/P3vf+f8+fNx/Xu+UTERhHpq5u2e0u9jx44xa9YsXnnlFQYNGtQj+lxQUMDevXu5cOECp06dits+r127lv79+5OVlRV+rif8XWdmZlJYWEhycjLp6enk5+dTXFwc9/2+EVEp791R/fr1o6SkJPy4p2Te7gkZx/fv309BQQHz58/H4XDwzTffxHWfy8vL8Xq93HvvvSQkJJCTk8OWLVvQNC18TDz1+bPPPuPSpUvk5eVRW1uL0+lEUZSI33FVVVXc9DekpKQEn88XDr6GYTBw4MC4/tu+UTExEuqpmbcffPBBTp48SUVFBYFAgM2bN8dVvy9cuMBvf/tbioqKcDgcQPz3+ezZsyxYsACv14vX62X79u1Mnz49bvu8YsUKNm/ezMaNGykoKODRRx9l0aJFWK1W9u/fD8DGjRvjpr8h9fX1FBYW4vF4aGho4OOPP+bNN9/skd9j1xMTI6GemnnbarWyePFiXnzxRTweD9nZ2UycODHazeo0H3zwAR6Ph8WLF4efmz59elz3OTs7m7KyMqZOnYqmaeTk5OBwOEhPT4/bPremqKiIBQsW0NDQwH333cfMmTOj3aRONWHCBEpLS5k6dSq6rvPMM88watSoHvk9dj2SRVsIIUTUxMTtOCGEEPFJgpAQQoiokSAkhBAiaiQICSGEiBoJQkIIIaJGgpCIS5mZmZw9e5bDhw9TUFDQ5rFlZWW89tprEc+9+eab7N69u9PaU1dXx/Tp0zl79iyZmZmtHrNt2zaWLVvWadcUIhZIEBJxbfjw4RQXF7d5zPHjxyNyeB06dIjy8nLGjRvXae344osvrrsx8bHHHqOkpIQjR4502nWF6O5iYrOqiG/79u2jqKiIAQMGcOLECWw2G4sXL+bPf/4zNTU1nDlzhvHjx/PSSy9RVFTEt99+SyAQYNiwYSxYsICkpCRKSkpYuHAhiqIwfPhwdF0Pv/fChQvZvHkzjY2N/OEPf+DAgQNomsZjjz3G008/TXFxMfX19cybN49Fixbxzjvv8Oyzz4bPf+utt+jfvz8nT54kISGB559/nr/+9a+cPHmSnJwc5s+fD8Dy5ctZt24diYmJjB49mu3bt7Njxw4Atm/fzuzZs6/7WeTn5/Puu+/KiEj0GDISEt3Cd999x3PPPcemTZuYNm0aL7/8MgBut5tPP/2Ul19+meXLl6NpGuvXr+eTTz6hb9++FBUV4fV6eemll5g7dy4bNmxgzJgxuN3uFtcoLi7G4/Hw2WefsWHDBg4cOMDp06cpKChg9OjRLFq0iLq6Ovbv38/YsWPD5x0+fJjnn3+ejRs3kpSUxPLly3n//fdZv349q1evprKykn/961+sX7+edevWsX79ehobG8Pne71eKioquPvuu6/7OYwdO5Yvv/yy1fYLEY8kCIluYejQoeEyFk888QRHjhyhpqaGUaNGhY/ZuXMnO3bsYOrUqeTl5bFt2zbKy8v54YcfMJlM4WSRkydPJjExscU19uzZQ35+PpqmYbFYWLlyJWPGjIk4pqKigoyMDCwWS/i5W2+9lWHDhgEwePBgxowZg8ViIT09ncTERGpra9m1axcTJ04kJSUFRVGYMWNG+Py9e/dGZJFuS1paGlarlXPnzrXzkxMitsntONEtNM8iHaKqKna7PfxY13Xmz59PdnY2AI2NjXg8Hs6fP8/V2adMppZ/2iaTKSJ1/oULF7DZbBHHKIoSvpUX0jwgtfXezdvQvD/btm1jypQpLc65Fk3TWv08hIhHMhIS3cLRo0c5evQoAGvWrCEzMzNcBC1k3LhxrFq1Cq/Xi67r/P73v+ett97innvuwTAMdu3aBQTnX2pra1tcIysri48//hhd1/F6vRQUFPDtt9+iaRp+vx8IjnSqq6vxeDwdan92djZbt26lvr4egHXr1gHBFP6HDh1i5MiR7Xqf+vp6vF4vAwYM6ND1hYhVEoREt9CnTx/efvttcnNz2bZtG4WFhS2OeeGFFxg4cCC/+tWvmDRpEoZhMHfuXMxmM8uWLWPp0qXk5eXx+eef07t37xbnz549G7PZTF5eHlOnTiU7O5ucnBxGjBjBmTNnmD17NikpKYwaNYqvv/66Q+3PysriySef5KmnnmLatGnU19eTkJBAaWkp999/f8TIxul0kpmZGfHz/fffA7B7927Gjx/fYvQlRLySLNoi6pqvYOsODhw4wJ/+9CeWL1/e7nMOHz7MwYMHwyUJVqxYQWlpKW+//XaHrj1z5kzmz5/P0KFDO3SeELFKRkJCXGXkyJEMGTKEL7/8st3nDBkyhJKSEiZPnkxubi579+5l3rx5Hbru559/zujRoyUAiR5FRkJCCCGiRkZCQgghokaCkBBCiKiRICSEECJqJAgJIYSIGglCQgghoub/ATMJROEpGRnBAAAAAElFTkSuQmCC\n"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.datasets import make_friedman2\n",
    "from sklearn.gaussian_process import GaussianProcessRegressor\n",
    "from sklearn.gaussian_process.kernels import DotProduct, WhiteKernel\n",
    "kernel = DotProduct() + WhiteKernel()\n",
    "gpr = GaussianProcessRegressor(kernel=kernel,random_state=0).fit(X_train_g, y_train_g)\n",
    "gpr.score(X_train_g, y_train_g)\n",
    "predictVal = gpr.predict(X_test_g, return_std=True)\n",
    "predictValNorl = np.maximum(predictVal[0].flatten(),0)\n",
    "utils.plotPicturesEx(y_test_t,predictValNorl,defaultTitle='GPR')\n",
    "utils.accuracyAssessment(y_test_g,predictValNorl)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "### OCX"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% md\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "outputs": [
    {
     "name": "stdout",
     "text": [
      "explained variance score:0.9642350557375601,\nmean absolute error:0.2798805253294525,\nmean squared error:0.5934875706283305,\nmean squared log error:0.004597952021287454 \nmedian_absolute_error:0.05456837182382779, \nr2Score:0.9614114871900715\n"
     ],
     "output_type": "stream"
    },
    {
     "data": {
      "text/plain": "(0.9642350557375601,\n 0.2798805253294525,\n 0.5934875706283305,\n 0.004597952021287454,\n 0.05456837182382779,\n 0.9614114871900715)"
     },
     "metadata": {},
     "output_type": "execute_result",
     "execution_count": 10
    },
    {
     "data": {
      "text/plain": "<Figure size 432x432 with 3 Axes>",
      "image/png": "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Fg+hVatWMWrUKDIzMwEYN24ceXl53HPPPU16fu0falqKm/JKP8me4014/MeXnP2CWwFHKx3VEktqc/xLtPa2BMuyWPNNIWHLYmjfDhhtYBvwFg+hQ4cOkZ2dHb2dk5PDhg0NVz04mcfvvSIWZbVq7dun2l1Ci1Ob41+itbe5vjt+4Bk9784bLjzLlcRWi4+OC4fD9dLZsqw2kdYiInL2tXgIderUiaKioujtoqIicnJyWroMERFpBVo8hC655BJWr17NkSNHqK6u5t133+WKKxKvi01ERGy4JtSxY0dmzZrFjBkzCAQCTJs2jQsu0JweEZFEZFiWdWazoURERP5NcbFsj4iItE0KIRERsY1CSEREbKMQEhER2yiERETENm0mhN544w0mTJjA2LFjefHFF+0uJ2YqKiqYNGkSe/fuBSJr7U2ePJmxY8fyxBNP2Fzd2ffUU08xceJEJk6cyOOPPw7Ef5uffPJJJkyYwMSJE1mwYAEQ/20GeOyxx5g9ezYAmzZtYurUqYwbN45f/vKXBINBm6s7+2677TYmTpzIlClTmDJlCuvXr0+Yz7FmsdqAgwcPWldddZV19OhRq7Ky0po8ebK1bds2u8s667788ktr0qRJ1qBBg6w9e/ZY1dXVVm5urlVQUGAFAgHrjjvusD788EO7yzxrPv74Y+s73/mO5fP5LL/fb82YMcN644034rrNa9assaZPn24FAgGrurrauuqqq6xNmzbFdZsty7JWrVpljRw50vrFL35hWZZlTZw40friiy8sy7KsBx54wHrxxRftLO+sC4fD1mWXXWYFAoHofYnyOdZcbeJMqO7K28nJydGVt+PNK6+8wn/9139FlzHasGEDPXr0oFu3bjidTiZPnhxX7c7Ozmb27Nm43W5cLhe9e/dm165dcd3miy++mOeeew6n08nhw4cJhUKUlZXFdZtLSkp44okn+NGPfgTAvn37qKmp4cILIwttTp06Na7aC7Bjxw4A7rjjDr797W/zwgsvJMznWHO1iRBqbOXtwsJCGyuKjYcffpgRI0ZEb8d7u/v27Rv9INq1axdvv/02hmHEdZsBXC4X8+fPZ+LEiYwePTruf84PPvggs2bNIj09HWj49zo7Ozuu2gtQVlbG6NGjefrpp/nb3/7Gyy+/zP79++P653ym2kQIJerK24nS7m3btnHHHXdw//33061bt4Ro88yZM1m9ejUHDhxg165dcdvmV199lc6dOzN69OjofYnw93ro0KE8/vjjpKWlkZWVxbRp05g/f37ct/tM2LK9d3N16tSJtWvXRm8nysrbibDi+Lp165g5cyZz5sxh4sSJfPrpp3Hd5vz8fPx+P+eddx5JSUmMHTuWvLw8TNOMHhNPbX7rrbcoKipiypQplJaWUlVVhWEY9X7GxcXFcdPeWmvXriUQCETD17IsunTpEtd/t89UmzgTStSVt4cMGcLOnTvZvXs3oVCIJUuWxFW7Dxw4wE9+8hPmzZvHxIkTgfhv8969e5k7dy5+vx+/38+yZcuYPn163LZ5wYIFLFmyhNdff52ZM2dy9dVX88gjj+DxeFi3bh0Ar7/+ety0t1Z5eTmPP/44Pp+PiooKFi1axG9+85uE/Bw7nTZxJpSoK297PB4effRR7r33Xnw+H7m5uYwfP97uss6aZ599Fp/Px6OPPhq9b/r06XHd5tzcXDZs2MB1112HaZqMHTuWiRMnkpWVFbdtbsy8efOYO3cuFRUVDBo0iBkzZthd0ll11VVXsX79eq677jrC4TA333wzw4cPT8jPsdPRKtoiImKbNtEdJyIi8UkhJCIitlEIiYiIbRRCIiJiG4WQiIjYRiEkcWno0KHs3buXr776ipkzZ57y2A0bNvDggw/Wu+83v/kNK1euPGv1lJWVMX36dPbu3cvQoUMbPea9997j6aefPmvvKdIWKIQkrg0ePJj58+ef8pjt27fXW8Pryy+/JD8/n8suu+ys1fHBBx+cdmLimDFjWLt2LZs2bTpr7yvS2rWJyaoS39asWcO8efM455xz2LFjB16vl0cffZS//OUvlJSUsGfPHq688kruu+8+5s2bx2effUYoFGLgwIHMnTuX1NRU1q5dy0MPPYRhGAwePJhwOBx97YceeoglS5ZQWVnJf//3f/P5559jmiZjxozhu9/9LvPnz6e8vJwHHniARx55hN///vfceuut0ef/9re/pXPnzuzcuZOkpCTuvPNOnn/+eXbu3MnYsWOZM2cOAM888wyvvfYaKSkpjBgxgmXLlvH+++8DsGzZMu65557T/llMmzaNp556SmdEkjB0JiStwsaNG7ntttt44403mDp1Kj//+c8BqKmp4c033+TnP/85zzzzDKZpsnDhQhYvXkxOTg7z5s3D7/dz3333MXv2bP71r38xcuRIampqGrzH/Pnz8fl8vPXWW/zrX//i888/p6CggJkzZzJixAgeeeQRysrKWLduHZdeemn0eV999RV33nknr7/+OqmpqTzzzDP8+c9/ZuHChfz973+nsLCQjz76iIULF/Laa6+xcOFCKisro8/3+/3s3r2bfv36nfbP4dJLL2XFihWN1i8SjxRC0ioMGDAguo3FDTfcwKZNmygpKWH48OHRYz788EPef/99rrvuOqZMmcJ7771Hfn4+W7duxel0RheLnDRpEikpKQ3eY9WqVUybNg3TNHG73bzwwguMHDmy3jG7d+8mOzsbt9sdva9r164MHDgQgO7duzNy5EjcbjdZWVmkpKRQWlrK8uXLGT9+POnp6RiGwS233BJ9/urVq+utIn0qmZmZeDwe9u3b18Q/OZG2Td1x0irUXUW6lsPhIDk5OXo7HA4zZ84ccnNzfcg6sQAAAi5JREFUAaisrMTn87F//35OXH3K6Wz4V9vpdNZbOv/AgQN4vd56xxiGEe3Kq1U3kE712nVrqNue9957j29/+9sNnnMypmk2+uchEo90JiStwubNm9m8eTMA//jHPxg6dGh0E7Ral112GS+++CJ+v59wOMyvfvUrfvvb39K/f38sy2L58uVA5PpLaWlpg/cYPXo0ixYtIhwO4/f7mTlzJp999hmmaRIMBoHImc7hw4fx+XzNqj83N5d3332X8vJyAF577TUgsoT/l19+ybBhw5r0OuXl5fj9fs4555xmvb9IW6UQklahQ4cO/O53v2Py5Mm89957PP744w2Oufvuu+nSpQvXX389EyZMwLIsZs+ejcvl4umnn+bJJ59kypQpLF26lPbt2zd4/j333IPL5WLKlClcd9115ObmMnbsWC688EL27NnDPffcQ3p6OsOHD+eTTz5pVv2jR4/mpptu4jvf+Q5Tp06lvLycpKQk1q9fz/nnn1/vzKaqqoqhQ4fW+7VlyxYAVq5cyZVXXtng7EskXmkVbbFd3RFsrcHnn3/On/70J5555pkmP+err77iiy++iG5JsGDBAtavX8/vfve7Zr33jBkzmDNnDgMGDGjW80TaKp0JiZxg2LBh9OzZkxUrVjT5OT179mTt2rVMmjSJyZMns3r1ah544IFmve/SpUsZMWKEAkgSis6ERETENjoTEhER2yiERETENgohERGxjUJIRERsoxASERHb/P8AMH8ICcFEEQAAAABJRU5ErkJggg==\n"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def calculate_chl_ocx(ocx_poly,lmbr):\n",
    "    \"\"\"A general Chl_OCx algorithm for fourth order polynomials (O'Reilly et al., 1998)\"\"\"\n",
    "    chl_ocx=10**(ocx_poly[0]+(ocx_poly[1]*lmbr**1)+(ocx_poly[2]*lmbr**2)+(ocx_poly[3]*lmbr**3)+(ocx_poly[4]*lmbr**4))\n",
    "    return chl_ocx\n",
    "\n",
    "def calculate_chl_ocx1(r443,r490,r510,r555,r670,ocx_poly=[0.3255,-2.7677,2.4409,-1.1288,-0.4990]):\n",
    "    mbr=np.maximum(r443/r555,r490/r555)\n",
    "    mbr=np.maximum(mbr,r510/r555) #Calculate max band ratio\n",
    "    lmbr=np.log10(mbr)\n",
    "    chl_ocx=calculate_chl_ocx(ocx_poly,lmbr)\n",
    "    return chl_ocx\n",
    "\n",
    "\n",
    "predictVal = calculate_chl_ocx1(X_test_copied[:,1],X_test_copied[:,2],X_test_copied[:,3],X_test_copied[:,4],X_test_copied[:,5])\n",
    "predictValNorl = np.maximum(predictVal.flatten(),0)\n",
    "utils.plotPicturesEx(y_test_t,predictValNorl,defaultTitle='OCX')\n",
    "utils.accuracyAssessment(y_test_g,predictValNorl)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "outputs": [],
   "source": [
    "\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  },
  "pycharm": {
   "stem_cell": {
    "cell_type": "raw",
    "source": [],
    "metadata": {
     "collapsed": false
    }
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}